package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IMissionItemFeedbackDAO;
import org.jsola.hr.dto.MissionCenterFeedBackDTO;
import org.jsola.hr.dto.MissionItemFeedbackAddDTO;
import org.jsola.hr.dto.MissionItemFeedbackUpdateDTO;
import org.jsola.hr.entity.MissionItemFeedbackDO;
import org.jsola.hr.query.MissionItemFeedbackQuery;
import org.jsola.hr.vo.MissionItemFeedbackListVO;
import org.jsola.hr.vo.MissionItemFeedbackVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 任务调度中心子项反馈记录
 *
 * @author zhr
 */
public interface IMissionItemFeedbackService extends IService<IMissionItemFeedbackDAO, MissionItemFeedbackDO> {

    /**
     * 新增任务调度中心子项反馈记录
     *
     * @param missionItemFeedbackAddDTO 新增任务调度中心子项反馈记录DTO
     * @param tokenUser                 当前用户
     * @return 任务调度中心子项反馈记录详情信息
     */
    MissionItemFeedbackVO save(MissionItemFeedbackAddDTO missionItemFeedbackAddDTO, TokenUser tokenUser);

    /**
     * 修改任务调度中心子项反馈记录
     *
     * @param missionItemFeedbackUpdateDTO 修改任务调度中心子项反馈记录DTO
     * @param tokenUser                    当前用户
     * @return 更新数量
     */
    int update(MissionItemFeedbackUpdateDTO missionItemFeedbackUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除任务调度中心子项反馈记录，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser              当前用户
     * @param missionItemFeedbackIds 任务调度中心子项反馈记录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... missionItemFeedbackIds);

    /**
     * 根据任务调度中心子项反馈记录id查找
     *
     * @param missionItemFeedbackId 任务调度中心子项反馈记录id
     * @param siteId                所属站点id
     * @return 任务调度中心子项反馈记录详情信息
     */
    MissionItemFeedbackVO selectById(String missionItemFeedbackId, String siteId);

    /**
     * 查询任务调度中心子项反馈记录
     *
     * @param missionItemFeedbackQuery 查询条件
     * @param siteId                   所属站点id
     * @return 任务调度中心子项反馈记录列表信息
     */
    List<MissionItemFeedbackListVO> select(MissionItemFeedbackQuery missionItemFeedbackQuery, String siteId);

    /**
     * 查询任务调度中心子项反馈记录记录数
     *
     * @param missionItemFeedbackQuery 查询条件
     * @param siteId                   所属站点id
     * @return 任务调度中心子项反馈记录记录数
     */
    int selectCount(MissionItemFeedbackQuery missionItemFeedbackQuery, String siteId);

    /**
     * 分页查询任务调度中心子项反馈记录
     *
     * @param missionItemFeedbackQuery 查询条件
     * @param siteId                   所属站点id
     * @return 任务调度中心子项反馈记录列表信息
     */
    Page<MissionItemFeedbackListVO> selectPage(MissionItemFeedbackQuery missionItemFeedbackQuery, String siteId);


    /**
     * 根据任务调度中心子项反馈记录id查找
     *
     * @param missionItemFeedbackId 任务调度中心子项反馈记录id
     * @param siteId                所属站点id
     * @return 任务调度中心子项反馈记录
     */
    MissionItemFeedbackDO selectDOById(String missionItemFeedbackId, String siteId);

    /**
     * 查询任务调度中心子项反馈记录
     *
     * @param missionItemFeedbackQuery 查询条件
     * @param siteId                   所属站点id
     * @return 任务调度中心子项反馈记录列表
     */
    List<MissionItemFeedbackDO> selectDO(MissionItemFeedbackQuery missionItemFeedbackQuery, String siteId);

    /**
     * 根据子项Id查询该子项反馈记录
     *
     * @param itemId 派单子项Id
     * @return 反馈记录
     */
    List<MissionItemFeedbackListVO> selectFeedbackByItemId(String itemId);

    /**
     * 批量保存子项反馈记录
     *
     * @param feedBackDTO 反馈参数
     * @param tokenUser   当前用户
     */
    void batchSaveFeedback(MissionCenterFeedBackDTO feedBackDTO, TokenUser tokenUser);
}


